home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Interactive 7
/
PC World Interactive 7.iso
/
program
/
qbprog.EXE
/
MODENE.TXT
< prev
next >
Wrap
Text File
|
1980-01-10
|
21KB
|
384 lines
┌──────────────────────────────────────────────────────────────────────────┐
│┌────────────────────────────────────────────────────────────────────────┐│
││ ││
││ QuickBasic'de karƒìlaƒtìºìm sorunlarì nasìl aƒtìm? ││
││ ││
││ Konu: Modemin Basic'de programlanmasì (#3) ││
││ ││
│└────────────────────────────────────────────────────────────────────────┘│
│ PS 29 · Aralìk'95 Gürol Demir │
└──────────────────────────────────────────────────────────────────────────┘
ÿki aydìr devam eden yazì dizimizde aºìrlìklì olarak modem programlama
için gerekli olan donanìm ve makine dili bilgileri vermiƒtik. Bu bilgilerin
desteºi ile artìk bizim tanìdìºìmìz basic diline yeniden merhaba diyebiliriz.
Modem programlamada gerekli basic komutlarìna göz atalìm.
┌─────────────────────┐
────────────────────────────┤ OPEN "COM... Deyimi ├──────────────────────────
└─────────────────────┘
Amacì : Bir iletiƒim dosyasì açmak
Dili : GwBasic, TurboBasic, Qbasic, QuickBasic, ....
Format : OPEN "COMn:[parametreler] FOR RANDOM AS #DosyaNo
COMn : Seri geniƒleme yuvasìnìn numarasìdìr. Com1 veya Com2 olabilir,
diºerlerine (Com3,Com4) izin verilmez. Bu aynì zamanda IRQ3 ve
IRQ4'den baƒkasìna da izin verilmeyeceºi anlamìndadìr.
DosyaNo : Basic'in okuma yazma iƒlemleri için kullanacaºì numaradìr.
Parametreler : Hìz + Parite + Geniƒlik + Dur + Önemsiz diºer parametrelerdir.
Hìz : 75,(..),2400,4800, 9600 Bps'dir.Varsayìlan 300'dür.
9600 Bps'den hìzlì iletiƒime izin verilmez.
Parite : Gönderme ve alma için karƒìlìk belirtir.
S,O,M,E,N deºerlerini alabilirler. (tavsiye="N")
Geniƒlik : ÿletiƒime konu karakter geniƒliºini belirtir.
4,5,6,7,8 deºerlerini alabilir. Varsayìm 7 dir.
Varsayìlan uygulandìºìnda Türkçe karakterler modem
yoluyla iletilemezler. Bu nedenle "8" kullanìlmak
zorundadìr.
Dur : Durdurma bitlerinin sayìsìnì gösterir. Yüksek hìzda
daima "1" kullanìlìr.
Diºer : Önemsizdir. Yine de help dosyasìna bakìnìz.
Tipik bir iletiƒim dosyasì ƒu ƒekilde bir komutla açìlìr:
┌─────────────────────────────────────────┐
│ OPEN "Com2:2400,N,8,1" FOR RANDOM AS #1 │
└─────────────────────────────────────────┘
Burda geçen;
Com2 yerine sadece Com1 atternatifdir.
2400 yerine ise normal koƒullarda 4800 veya 9600 alternatif
olabilir.
N,8,1 yerine atternatif kullanmayìnìz.
#1 yerine makinenizin izin verdiºi herhangi bir dosya
numarasì olabilir.
┌─────────────────────────────────────────┐
Soru > │ Basic OPEN "COM..." deyiminde ne yapar? │
└─────────────────────────────────────────┘
1) Bellek ayìrìr : Basic baƒlarken "C" anahtarì ile bir iletiƒim
bellek miktarì belirtilmiƒ ise (Örn. QBX /C:16000 gibi) bu büyüklükte, yoksa
512 byte büyüklüºünde bir belleºi iletiƒim de ambar olarak kullanmak üzere
ayìrìr.
2) Bu komutla verilen dosya numarasì bundan böyle sanki bir fiziki
dosya numarasì gibi görülsün diye ayarlamalar yapar.
3) Yeni bir interrupt rutini yazar. Eºer OPEN "Com1... ise bu rutini
Ch kesmesine, OPEN"Com2... ise Bh kesmesine atar bundan evvel eski kesmelere
ait adresleri saklar.
Bu rutinde kullanìlmak üzere ilgili aygìtìn adresini eºer Com1
ise 40h:00 dan, eºer Com2 ise 40h:02'den alìr.
4) Modem portunu yani 40h:00 veya 40:02'den aldìºì adresin bir
fazlasìnì IRQ üretmek için programlar (OUT &H3F9, 11 gibi).
5) 8259 chip'inden IRQ hattì için onay alìr (Com1 için IRQ4,
Com2 için IRQ3).
Yukardaki iƒlemlerden 3, 4 ve 5 nci maddeler bir basic programìnda
müdahale edilmesi gerekenlerdir. Bunlarì daha evvel iƒledik. 1 ve 2 nci
maddeler ise bizim basic'den ödünç alacaklarìmìzdìr.
┌─────────────────────────────────┐
Soru > │ Modemim Com4'de ise ne olacak ? │
└─────────────────────────────────┘
Hemen basic dilini bìrakìp Delphi'ye geçin gibi acizlik belirtisi
bir cevap vermeyeceºim ama sorunun GwBasic'deki cevabìnì bilmiyorum. Bu
nedenle eºer GwBasic kullanìyorsanìz Qbasic veya Quick Basic'e geçmenin tam
sìrasì diyerek GwBasic'de bu konudaki cahilliºimi ilan edebilirim.
Qbasic ve üstü basic ailesinden diller Com1 ve Com2'nin adresini
BIOS'dan alìrlar.
┌─────────────────────────────────┐
│ Bios'da │
│ 40h:00 Com1'in adresi │
│ 40h:02 Com2'nin adresi │
│ 40h:04 Com3'ün adresi │
│ 40h:06 Com4'ün adresi │
│ ƒeklinde tutulur │
└─────────────────────────────────┘
Eºer modeminiz Com4'de ise ve iletiƒim dosyasì OPEN "Com1... ile
açìlacak ise tek yapacaºìnìz ƒey "OPEN" komutundan evvel bios'un 40h:00
adresine &H2E8 adresini aktarmaktìr.
┌──────────────┐
──────────────────────────────┤ CLOSE Deyimi ├───────────────────────────────
└──────────────┘
Bu komutu modemi kapatmak için kullanacaºìz fazla bir esprisi
yoktur. Format: CLOSE #DosyaNo (Örneºin CLOSE #1)
>HangUp (Baºlantìnìn kesilmesi) :
Modem kapatìlmadan evvel bir takìm iƒlemleri iptal edilmelidir.
Kapatìlmaya çalìƒìlam modem o sìrada iletiƒim halinde veya bir telefon
çevirmekte olabilir. Modem ƒu iƒlemler ile kapatìlmalìdìr:
┌───────────────────────────────────────┐
│ PRINT #1, "ATH" │
│ PRINT #1, CHR$(13) │
│ PRINT #1, "ATZ" │
│ OUT Port + 4, (INP(Port + 4) AND 252) │
│ CLOSE #1 │
└───────────────────────────────────────┘
┌──────────────┐
──────────────────────────────┤ PRINT Deyimi ├───────────────────────────────
└──────────────┘
Bu komutu modeme veri göndermek için kullanacaºìz fazla bir esprisi
yoktur. Format: PRINT #DosyaNo,Veri$ (Örneºin PRINT #1, "ATZ")
┌─────────────────────────┐
──────────────────────────┤ INPUT$ ve LOC Deyimleri ├────────────────────────
└─────────────────────────┘
Bu komutlarì modemden veri okumak için kullanacaºìz fazla bir
esprileri yoktur. (Örneºin A$ = INPUT$(LOC(1),#1)
┌────────────────────────────┐
────**──**───******──────┤ Laf bitti, ƒimdi iƒ zamanì ├───────******──**──**─
└────────────────────────────┘
Buraya kadar öºrendiklerimiz sayesinde ter türlü modemi basic'de
programlayabiliriz. Parçalarì nasìl birleƒtireceºiz? Aƒaºìda verilen örneºi
iyi incelemenizi öneririm. Aƒaºìda verilen yordamlarda mikro iƒlemcinin
basic'e esir düƒmesinin bir yìllìk özeti yer almaktadìr.
>ÿƒte size bir terminal programì çekirdeºi:
┌───────────────────────┐
│ Baƒlangìç Tavsiyeleri │
┌──────────────────────┴───────────────────────┴───────────────────────┐
│'QBASIC'de de çalìƒìr │
│' bu dilde bellek sorunu nedeniyle yavaƒ bir hìz seçiniz. │
│ │
│'QuickBasic de çalìƒmasì için ise versiyon 7.1 QBX /L QBX /C:32000 │
│' versiyon 4.5 QB /L QB /C:32000 │
│' ƒeklinde yüklenmelidir. │
└──────────────────────────────────────────────────────────────────────┘
┌───────────────────────┐
│ Ana Program │
┌───────────┴───────────────────────┴──────────────┐
│DECLARE SUB EkranAc (Tip!) │
│DECLARE SUB Terminal () │
│DECLARE SUB ModemiKapa (ModemAdresi!) │
│DECLARE SUB ModemiAc (ModemAdresi!, Hiz!, IrqNo!) │
│ │
│DIM SHARED Sakla(27) │
│ │
│'=================================================│
│'Deºiƒkenler │
│'Kendi modem bilgilerinizi giriniz │
│ │
│ Irq = 5: Port = &H3E8: Baud = 57600: Ansi = 1 │
│ │
│'Seçenekler │
│'Irq = 2: Port = &H2E8: Baud = 2400 : Ansi = 1 │
│'Irq = 3: Port = &H2F8: Baud = 4800 : Ansi = 0 │
│'Irq = 4: Port = &H3E8: Baud = 9600 │
│'Irq = 5: Port = &H3F8: Baud = 14400 │
│'Irq = 7 : Baud = 19200 │
│' Baud = 38400 │
│' Baud = 57600 │
│' Baud = 115200 │
│ │
│'=================================================│
│'Program baƒlangìcì │
│CALL ModemiAc(Port, Baud, Irq) │
│EkranAc (Ansi) │
│Terminal │
│ModemiKapa (Port) │
│END │
│ │
│ │
│'=================================================│
│'IRQ hattìnìn açìlmasì için makine dili yordamì │
│IRQSerbest: │
│DATA &H50 : 'PUSH AX │
│DATA &H53 : 'PUSH BX │
│DATA &H51 : 'PUSH CX │
│DATA &HFA : 'CLI │
│DATA &H31, &HC9 : 'XOR CX,CX │
│DATA &HB1, 2 : 'MOV CL,02 │
│DATA &HBB, 1, 0 : 'MOV BX,0001 │
│DATA &HD3, &HE3 : 'SHL BX,CL │
│DATA &HF7, &HD3 : 'NOT BX │
│DATA &HE4, &HA1 : 'IN AL,A1 │
│DATA &H20, &HF8 : 'AND AL,BH │
│DATA &HE6, &HA1 : 'OUT A1,AL │
│DATA &HE4, &H21 : 'IN AL,21 │
│DATA &H20, &HD8 : 'AND AL,BL │
│DATA &HE6, &H21 : 'OUT 21,AL │
│DATA &HFB : 'STI │
│DATA &H59 : 'POP CX │
│DATA &H5B : 'POP BX │
│DATA &H58 : 'POP AX │
│DATA &HCB : 'RETF │
└──────────────────────────────────────────────────┘
┌───────────────────────┐
│ Ekran Açma Yordamì │
┌────────┴───────────────────────┴────────┐
│'Ekran Ansi veya TTY modda açìlìyor │
│SUB EkranAc (Tip) │
│ IF Tip = 1 THEN │
│ OPEN "CON" FOR OUTPUT AS #2 'Ansi │
│ ELSE │
│ OPEN "SCRN:" FOR OUTPUT AS #2 'TTY │
│ END IF │
│END SUB │
└─────────────────────────────────────────┘
┌───────────────────────┐
│ Modem Açma Yordamì │
┌─────────────────┴───────────────────────┴────────────────┐
│SUB ModemiAc (ModemAdresi, Hiz, IrqNo) │
│'Bazì deºerler saklanìyor │
│ DEF SEG = 0 │
│ FOR I = 40 TO 63 'ÿnterrupt adresleri │
│ Sakla(I - 40) = PEEK(I) │
│ NEXT │
│ Sakla(24) = INP(&H21) '8259 (PIC) deºerleri │
│ Sakla(25) = INP(&HA1) │
│ Sakla(26) = PEEK(1026) 'Com2 eski aygìt adresi │
│ Sakla(27) = PEEK(1027) │
│ │
│'=========================================================│
│'Com2'ye bizim modem atanìyor │
│ POKE 1027, ModemAdresi \ 256 │
│ POKE 1026, ModemAdresi AND 255 │
│ │
│'=========================================================│
│'Yeni aygìt (bizim modem) açìlìyor │
│ OPEN "Com2:2400,N,8,1" FOR RANDOM AS #1 │
│ │
│'=========================================================│
│'Modem seçilen hìz için ayarlanìyor │
│ Sakla = INP(ModemAdresi + 3) │
│ OUT ModemAdresi + 3, 128 │
│ OUT ModemAdresi, 115200 / Hiz │
│ OUT ModemAdresi + 3, Sakla │
│ │
│'=========================================================│
│'Com2'ye ait IRQ3 kapatìlìyor, PIC deºerleri iade ediliyor│
│ OUT &H21, Sakla(24) │
│ OUT &HA1, Sakla(25) │
│ │
│'=========================================================│
│'Bizim modeme ait IRQ'nun, Com2'ye ait interruptu │
│'kullanmasì saºlanìyor │
│ IntAdres = (IrqNo + 8) * 4 │
│ POKE IntAdres, PEEK(44) │
│ POKE IntAdres + 1, PEEK(45) │
│ POKE IntAdres + 2, PEEK(46) │
│ POKE IntAdres + 3, PEEK(47) │
│ │
│'=========================================================│
│'Bizim modemin IRQ'su için 8259'dan izin alìnìyor │
│ RESTORE IRQSerbest │
│ REDIM Oku(31) │
│ DEF SEG = VARSEG(Oku(0)) │
│ │
│ FOR PicMask = 0 TO 31 │
│ READ D% │
│ IF PicMask = 7 THEN D% = IrqNo │
│ POKE VARPTR(Oku(0)) + PicMask, D% │
│ NEXT PicMask │
│ │
│ CALL ABSOLUTE(VARPTR(Oku(0))) │
│ │
│'Modemin açìlmasì tamamlandì │
│END SUB │
└──────────────────────────────────────────────────────────┘
┌───────────────────────┐
│ Modem Kapama Yordamì │
┌─────────────────┴───────────────────────┴────────────────┐
│SUB ModemiKapa (ModemAdresi) │
│'Modem kapatìlìyor │
│ PRINT #1, "ATH" │
│ OUT ModemAdresi + 4, (INP(ModemAdresi + 4) AND 252) │
│ CLOSE #1 │
│'=========================================================│
│'Eski deºerler iade ediliyor │
│ DEF SEG = 0 │
│ FOR I = 40 TO 63: 'ÿnterrupt adresleri │
│ POKE I, Sakla(I - 40) │
│ NEXT │
│ OUT &H21, Sakla(24) 'PIC deºerleri │
│ OUT &HA1, Sakla(25) │
│ POKE 1026, Sakla(26) 'Com2 adresi │
│ POKE 1027, Sakla(27) │
│END SUB │
└──────────────────────────────────────────────────────────┘
┌─────────────────────────────┐
│ Terminal (Yerel iletiƒim) │
┌─────────────┴─────────────────────────────┴──────────────┐
│SUB Terminal │
│COLOR 7, 1 │
│CLS │
│LOCATE 1, 1, 1: PRINT "Modem ÿnstall ediliyor" │
│PRINT #1, "ATZ" │
│RR = FIX(TIMER) │
│DO │
│ IF LOC(1) > 0 THEN B$ = B$ + INPUT$(LOC(1), #1) │
│ IF INSTR(B$, "OK") > 0 THEN EXIT DO │
│ IF FIX(TIMER) - RR > 5 THEN │
│ PRINT "Modem Port Adresi ve IRQ deºerleri hatalì !!" │
│ EXIT SUB │
│ END IF │
│LOOP │
│ │
│LOCATE 1, 1, 1 │
│PRINT "Modem uygun bulundu, baƒladì (Çìkìƒ için Esc)" │
│DO │
│ A$ = INKEY$ │
│ IF A$ <> "" THEN │
│ IF ASC(A$) = 27 THEN EXIT DO │
│ PRINT #1, A$; : 'Modem girdisi │
│ ELSE │
│ IF LOC(1) > 0 THEN │
│ B$ = INPUT$(LOC(1), #1) │
│ PRINT #2, B$; : 'Modem çìktìsì │
│ END IF │
│ END IF │
│LOOP │
│END SUB │
└──────────────────────────────────────────────────────────┘
Basic'de modemin programlanmasì ile ilgili yazì dizimiz burada sona
ermektedir. Modemin programlanmasìnda sadece temel taƒlarì verilmiƒtir.
Bilgisayarìn bir baƒka bilgisayar ile telefon hattì kullanarak irtibatìnì
verilen bilgiler ile saºlayabilirsiniz. Ve uzaktaki bir arkadaƒìnìz ile
klavye üzerinden sohbet edebilirsiniz.
Ancak dosya transferi için iki birim arasìnda bir dosya transfer
protolu yapìlmasì gerekir. Harici olarak kullanìlan protokeller piyasada
mevcuttur. En yaygìn olan Z modem iletiƒim protolu olup DSZ.EXE veya DSZ.COM
isimli programlar ile haricen kullanìlabilir.
Görüƒmek üzere....
Adres:
PC World/Türkiye
PS-Gürol Demir
Eski Büyükdere cad.
Sanayi mah. Behçet sokak
No:25/B Kat:5
80650 4.Levent / ÿSTANBUL
Internet : gurold@doruk.com.tr